package com.sky.aion.redis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class Subscriber {

    /**
     * 异步调用
     */
    public void synStart(){
        new Thread(()->{
            //注意，在实际ngx_lua_redis应用中，redis单个客户端订阅模式下仅能使用有限的几个命令，不能使用其它结构命令，如lpop,rpush等；
            //因为 publish是普通的request/response模式, 但subscribe不是，否则会报错：
            //　　　　　　ERR only (P)SUBSCRIBE \/ (P)UNSUBSCRIBE \/ PING \/ QUIT allowed in this cont
            //该特性不适用单例模式，要解决上面局限
            JedisPool pool = new JedisPool(new JedisPoolConfig(), "127.0.0.1");
            Jedis jedis = pool.getResource();
            try {

                jedis.psubscribe(new KeyExpiredListener(), "__key*__:*");
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                if (jedis != null) {
                    jedis.close();
                }
            }
        },"redis监听线程").start();
    }
 
}
